package com.zjj.algorithm.learning.atguigu.tree;

/**
 * 二叉树
 * @author zjj_admin
 * @date 2022/11/22 22:54
 */
public class BinaryTree {

    /**
     * 树的根节点
     */
    private TreeNode root;

    public BinaryTree() {
    }


    public TreeNode getRoot() {
        return root;
    }

    public void setRoot(TreeNode root) {
        this.root = root;
    }

    public void preOrder() {
        if (this.root != null) {
            this.root.preOrder();
        } else {
            System.out.println("二叉树为空");
        }
    }

    public void midOrder() {
        if (this.root != null) {
            this.root.midOrder();
        } else {
            System.out.println("二叉树为空");
        }
    }

    public void postOrder() {
        if (this.root != null) {
            this.root.postOrder();
        } else {
            System.out.println("二叉树为空");
        }
    }

    /**
     * 前序查找
     * @param no
     * @return
     */
    public TreeNode preSearch(int no){
        if(this.root != null){
            return this.root.preSearch(no);
        }else {
            return null;
        }
    }

    /**
     * 中序查找
     * @param no
     * @return
     */
    public TreeNode midSearch(int no){
        if(this.root != null){
            return this.root.midSearch(no);
        }else {
            return null;
        }
    }

    /**
     * 后续查找
     * @param no
     * @return
     */
    public TreeNode postSearch(int no){
        if(this.root != null){
            return this.root.postSearch(no);
        }else {
            return null;
        }
    }


    /**
     *  删除节点
     */
    public void delNode(int no) {
        if (this.root != null) {
            // 1、判空，若只有一个 root 根节点存在，则等价于二叉树置空
            if (root.getNo() == no) {
                root = null;
            } else {
                // 否则 递归删除
                root.delNode(no);
            }

        } else {
            System.out.println("当前二叉树为空");
        }
    }
}
